Continuous Delivery

Continuous Delivery (CD) is a set of principles and practices in growing use in software development to improve the process of software delivery. Techniques such as automated testing, continuous integration and automated deployments allow software to be developed to a high standard and easily packaged and deployed to test environments, resulting in the ability to rapidly, reliably and repeatedly push out enhancements and bug fixes to customers at low risk and with minimal manual overhead.

The technique has been pioneered by ThoughtWorks and has developed into a discipline of its own, with job descriptions for roles such as "Buildmaster" calling for CD skills as mandatory. The "bible" on the subject was written by Jez Humble (currently) and Dave Farley (formerly) of ThoughtWorks.[1]

Contents

Principles

Continuous Delivery introduces the notion of the deployment pipeline[2]: a set of test phases through which a piece of software must pass on its way to release. Code is compiled (or just packaged, in the case of a non-compiled language) by a build server when committed to a source control repository, then tested by a number of different techniques (even including some manual testing) before it can be marked as "ready for release".

Developers used to a long cycle time may need to change their mindset when working in a CD environment. It is important to understand that any code commit may be released to customers at any point. Patterns such as feature toggles can be very useful for committing code early which is not yet ready for use by end users. Other useful techniques for developing code in isolation such as code branching are not obsolete in a CD world, but must be adapted to fit the principles of CD - for example, running multiple long-lived code branches can prove impractical, as a releasable artefact must be built early in the CD process from a single code branch if it is to pass through all phases of the pipeline.

Technologies

Continuous Delivery is fundamentally about automation of the software development life cycle: build, test, package and deploy should be as hands-off as possible. As a result, although it is possible to "home-bake" these processes, a CD system of any real size will utilise a number of different tools and technologies:

Education

A number of online resources (including some webinars[3]) exist for education about Continuous Delivery. The literature is limited except for the aforementioned Addison Wesley book.

References

External links

(1) Jez Humble's Continuous Delivery blog